<template>
  <view class="container">
    <!-- 空白页 -->
    <view v-if="hasLogin|| empty===true" class="empty">
      <image src="/static/emptyCart.jpg" mode="aspectFit"></image>
      <view class="empty-tips">
        空空如也
        <navigator class="navigator" url="../index/index" open-type="switchTab">随便逛逛></navigator>
      </view>

    </view>
    <view v-else>
      <!-- 列表 -->
      <view class="cart-list">
        <block v-for="(item, index) in cartList" :key="item.id">
          <view class="cart-item" :class="{'b-b': index!==cartList.length-1}">
            <image :src="item.checked ? '/static/selected.png' : '/static/dataBag/cicrle.png'"
                   mode="aspectFit" class="circle" @click="check('item', index)"></image>

            <view class="image-wrapper">
              <image :src="item.productInfoVo.iconUrl || defauletImage" :class="[item.loaded]"
                     mode="aspectFill" lazy-load @load="onImageLoad('cartList', index)"
                     @error="onImageError('cartList', index)"></image>

            </view>
            <view class="item-right">
              <text class="name">{{ item.productInfoVo.name || "未命名" }}</text>
              <view>

              </view>
              <text class="attr">{{ item.productInfoVo.brief || "暂无描述" }}</text>
              <view class="v-price">
                <text class="price">¥{{ item.productPriceVo.price || 0 }} </text>
                <text class="price">×{{ item.number }}</text>
              </view>

            </view>
            <!-- 删除购物车 -->
            <text class="del-btn yticon icon-fork" @click="deleteCartItem(item.id)"></text>
          </view>
        </block>
      </view>
      <!-- 底部菜单栏 -->
      <view class="action-section">
        <view class="checkbox">
          <image :src="allChecked?'/static/selected.png':'/static/dataBag/cicrle.png'" mode="aspectFit"
                 @click="check('all')"></image>
          <text class="text-v">全选</text>

        </view>
        <view class="total-box">
          <text class="price">合计：¥{{ total }}</text>
        </view>
        <button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
      </view>
    </view>
  </view>
</template>

<script>
import {
  mapState
} from 'vuex';
import uniNumberBox from '@/components/uni-number-box.vue'
import {
  deleteDataCart,
  getCart
} from '../../api/cart';

export default {
  components: {
    uniNumberBox
  },
  data() {
    return {
      total: 0, //总价格
      allChecked: false, //全选状态  true|false
      empty: false, //空白页现实  true|false
      cartList: [],
      defauletImage: '/static/mine/default.jpg'
    };
  },
  onLoad() {
    this.loadData();
  },
  watch: {
    //显示空白页
    cartList(e) {
      let empty = e.length === 0 ? true : false;
      if (this.empty !== empty) {
        this.empty = empty;
      }
    }
  },
  computed: {
    ...mapState(['hasLogin'])
  },
  methods: {
    //请求数据
    async loadData() {
      // 获取购物车列表
      this.getdata()
      this.calcTotal(); //计算总价
    },
    getdata() {
      getCart().then(data => {

        this.cartList = data.rows
      })

    },
    //监听image加载完成
    onImageLoad(key, index) {
      this.$set(this[key][index], 'loaded', 'loaded');
    },
    //监听image加载失败
    onImageError(key, index) {
      this[key][index].image = '/static/errorImage.jpg';
    },
    navToLogin() {
      uni.navigateTo({
        url: '/pages/public/login'
      })
    },
    //选中状态处理
    check(type, index) {
      if (type === 'item') {
        // 切换所点击项目的选中状态
        this.cartList[index].checked = !this.cartList[index].checked;
        console.log("jj:", this.cartList[index].checked)
      } else {
        // 切换allChecked标志
        this.allChecked = !this.allChecked;
        // 更新cartList中所有项目的选中状态
        this.cartList.forEach(item => {
          item.checked = this.allChecked;
        });
      }

      // 在更新选中状态后重新计算总数
      this.calcTotal(type);
    },


    //数量
    numberChange(data) {
      this.cartList[data.index].number = data.number;
      this.calcTotal();
    },
    //删除
    deleteCartItem(id) {
      deleteDataCart(id).then(res => {
        if (res.code === 200) {
          this.$api.msg('删除成功')
          this.getdata()
          // uni.navigateBack();
        } else {
          this.$api.msg(res.msg)
        }
      })

    },
    //清空
    clearCart() {
      uni.showModal({
        content: '清空购物车？',
        success: (e) => {
          if (e.confirm) {
            this.cartList = [];
          }
        }
      })
    },
    //计算总价
    calcTotal() {
      let list = this.cartList;
      if (list.length === 0) {
        this.empty = true;
        return;
      }
      let total = 0;
      let checked = true;
      list.forEach(item => {
        if (item.checked === true) {
          total += item.productPriceVo.price * item.number;
        } else if (checked === true) {
          checked = false;
        }
      })
      this.allChecked = checked;
      this.total = Number(total.toFixed(2));

    },
    //创建订单
    createOrder() {
      let list = this.cartList;
      let goodsData = [];
      list.forEach(item => {
        if (item.checked) {
          goodsData.push({
            attr_val: item.attr_val,
            productName:item.productInfoVo.name||"未命名",
            productId:item.productInfoVo.id,
            price: item.productPriceVo.price||0,
            priceId: item.productPriceVo.id,
            iconUrl:item.productInfoVo.iconUrl,
            number: item.number
          })
        }
      })
      console.log('this.goodsData', goodsData)
      if (goodsData.length === 0) {
        this.$api.msg('请选择商品');
      }else {
        uni.navigateTo({
          url: `/pages/order/createOrder?data=${JSON.stringify({
            goodsData: goodsData
          })}`
        })
      }

    }
  }
}
</script>

<style lang='scss'>
.container {
  padding-bottom: 134upx;
  background-color: #0a0a22;

  /* 空白页 */
  .empty {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100vh;
    padding-bottom: 100upx;
    display: flex;
    justify-content: center;
    flex-direction: column;
    align-items: center;

    /* background: #fff; */
    image {
      width: 240upx;
      height: 160upx;
      margin-bottom: 30upx;
    }

    .empty-tips {
      display: flex;
      font-size: $font-sm+2upx;
      color: $font-color-disabled;

      .navigator {
        color: $uni-color-primary;
        margin-left: 16upx;
      }
    }
  }
}

/* 购物车列表项 */

.cart-list {

  .cart-item {
    display: flex;
    position: relative;
    padding: 30upx 40upx;
    background-color: $bg-color;
    margin: 0 20upx 20upx 20upx;
    align-items: center;

    .circle {
      width: 40upx;
      height: 40upx;
      margin-right: 10upx;
    }

    .image-wrapper {
      width: 230upx;
      height: 230upx;
      flex-shrink: 0;
      position: relative;

      image {
        border-radius: 8upx;
      }
    }

    .checkbox {
      width: 50upx;
      height: 50upx;

    }

    .item-right {
      display: flex;
      flex-direction: column;
      flex: 1;
      overflow: hidden;
      position: relative;
      padding-left: 30upx;

      .title,
      .price {
        font-size: $font-base + 2upx;
        color: $font-color-dark;
        height: 40upx;
        line-height: 40upx;
      }

      .attr {
        font-size: $font-sm + 2upx;
        color: $font-color-light;
        height: 50upx;
        line-height: 50upx;
      }

      .v-price {
        display: flex;
        justify-content: space-between;

        .price {
          color: #fff;
          height: 50upx;
          line-height: 50upx;
        }
      }

      .name {
        color: #fff;
      }
    }

    .del-btn {
      padding: 4upx 10upx;
      font-size: 34upx;
      height: 50upx;
      color: $font-color-light;
    }
  }
}


/* 底部栏 */
.action-section {
  /* #ifdef H5 */
  /* #endif */
  position: fixed;
  bottom: 30upx;
  z-index: 95;
  display: flex;
  align-items: center;
  width: 100%;
  height: 100upx;
  padding: 0 30upx;
  background-color: $bg-color;
  box-shadow: 0 0 20upx 0 rgba(0, 0, 0, .5);
  border-radius: 16upx;

  .checkbox {
    display: flex;
    justify-content: center;
    height: 52upx;
    position: relative;

    image {
      width: 52upx;
      height: 100%;
      position: relative;
      z-index: 5;
    }

    .text-v {
      color: #fff;
      margin-left: 10upx;
    }
  }

  .clear-btn {
    position: absolute;
    left: 26upx;
    top: 0;
    z-index: 4;
    width: 0;
    height: 52upx;
    line-height: 52upx;
    padding-left: 38upx;
    font-size: $font-base;
    color: #fff;
    background: $font-color-disabled;
    border-radius: 0 50px 50px 0;
    opacity: 0;
    transition: .2s;

    &.show {
      opacity: 1;
      width: 120upx;
    }
  }

  .total-box {
    flex: 1;
    display: flex;
    flex-direction: column;
    text-align: right;
    padding-right: 40upx;

    .price {
      font-size: $font-lg;
      color: white;
    }

    .coupon {
      font-size: $font-sm;
      color: $font-color-light;

      text {
        color: $font-color-dark;
      }
    }
  }

  .confirm-btn {
    padding: 0 38upx;
    margin: 0;
    border-radius: 100px;
    height: 76upx;
    line-height: 76upx;
    font-size: $font-base + 2upx;
    background: $uni-color-primary;
    box-shadow: 1px 2px 5px rgba(217, 60, 93, 0.72)
  }
}

/* 复选框选中状态 */
.action-section .checkbox.checked,
.cart-item .checkbox.checked {
  color: $uni-color-primary;
}
</style>
